package org.budo.redis.jdbc.driver.executor;

import java.util.Map;

/**
 * 执行Redis语句
 * 
 * @author lmw
 */
public interface RedisStatementExecutor {
    Long append(byte[] key, byte[] value);

    void close();

    Long decr(byte[] key);

    Long decrBy(byte[] key, Long value);

    Long del(byte[][] keys);

    Boolean exists(byte[] key);

    Long expire(byte[] key, Integer expireIn);

    Long expireAt(byte[] key, Long unixTime);

    byte[] get(byte[] key);

    byte[] getrange(byte[] key, Long from, Long to);

    byte[] getSet(byte[] key, byte[] value);

    Long hdel(byte[] key, byte[][] fields);

    Boolean hexists(byte[] key, byte[] field);

    byte[] hget(byte[] key, byte[] field);

    Map<byte[], byte[]> hgetAll(byte[] key);

    Long hincrBy(byte[] key, byte[] field, Long value);

    Double hincrByFloat(byte[] key, byte[] field, Double value);

    byte[][] hkeys(byte[] key);

    Long hlen(byte[] key);

    byte[][] hmget(byte[] key, byte[][] fields);

    String hmset(byte[] key, Map<byte[], byte[]> map);

    Long hset(byte[] key, byte[] field, byte[] value);

    Long hsetnx(byte[] key, byte[] field, byte[] value);

    byte[][] hvals(byte[] key);

    Long incr(byte[] key);

    Long incrBy(byte[] key, Long value);

    Double incrByFloat(byte[] key, Double value);

    byte[][] keys(byte[] pattern);

    byte[] lindex(byte[] key, Long index);

    Long linsert(byte[] key, byte[] position, byte[] pivot, byte[] value);

    Long llen(byte[] key);

    byte[] lpop(byte[] key);

    Long lpush(byte[] key, byte[][] values);

    Long lpushx(byte[] key, byte[] value);

    byte[][] lrange(byte[] key, Long start, Long end);

    Long lrem(byte[] key, Long count, byte[] value);

    String lset(byte[] key, Long index, byte[] value);

    String ltrim(byte[] key, Long start, Long end);

    byte[][] mget(byte[][] keys);

    Long move(byte[] key, Integer dbIndex);

    String mset(byte[][] keyValues);

    Long msetnx(byte[][] keyValues);

    Long persist(byte[] key);

    Long pexpire(byte[] key, Long milliSeconds);

    Long pexpireAt(byte[] key, Long milliSecondsTimestamp);

    String psetex(byte[] key, Long milliSeconds, byte[] value);

    Long pttl(byte[] key);

    String randomKey();

    String rename(byte[] key, byte[] newKey);

    Long renamenx(byte[] key, byte[] newKey);

    byte[] rpop(byte[] key);

    byte[] rpoplpush(byte[] srcKey, byte[] destKey);

    Long rpush(byte[] key, byte[][] values);

    Long rpushx(byte[] key, byte[] value);

    Long sadd(byte[] key, byte[][] values);

    Long scard(byte[] key);

    byte[][] sdiff(byte[][] keys);

    Long sdiffstore(byte[] destKey, byte[][] keys);

    String set(byte[] key, byte[] value);

    String setex(byte[] key, Integer seconds, byte[] value);

    Long setnx(byte[] key, byte[] value);

    Long setrange(byte[] key, Long offset, byte[] value);

    byte[][] sinter(byte[][] keys);

    Long sinterstore(byte[] destKey, byte[][] keys);

    Boolean sismember(byte[] key, byte[] value);

    byte[][] smembers(byte[] key);

    Long smove(byte[] srcKey, byte[] destKey, byte[] value);

    byte[] spop(byte[] key);

    byte[][] srandmember(byte[] key, Integer count);

    Long srem(byte[] key, byte[][] values);

    Long strlen(byte[] key);

    byte[][] sunion(byte[][] keys);

    Long sunionstore(byte[] destKey, byte[][] keys);

    Long ttl(byte[] key);

    String type(byte[] key);

    Long zadd(byte[] key, Map<byte[], Double> members);

    Long zcard(byte[] key);

    Long zcount(byte[] key, Double min, Double max);

    Double zincrby(byte[] key, Double score, byte[] value);

    Long zlexcount(byte[] key, byte[] min, byte[] max);

    Long zrank(byte[] key, byte[] value);

    Long zrem(byte[] key, byte[][] values);

    Long zremrangeByRank(byte[] key, Long from, Long to);

    Long zremrangeByScore(byte[] key, Double min, Double max);

    Long zrevrank(byte[] key, byte[] value);

    Double zscore(byte[] key, byte[] value);

    Object eval(byte[] script);

    byte[][] configGet(byte[] pattern);
}